% \textsc{\documentclass[a4paper,11pt]{book}
% 
% \usepackage[utf8x]{inputenc}
% \usepackage{ucs}
% \usepackage{amsmath}
% \usepackage{amsfonts}
% \usepackage{amssymb}
% \usepackage[left=2cm,top=2.5cm,right=3cm,bottom=4cm]{geometry}
% \usepackage{listings}
% \usepackage{graphicx}
% \usepackage[frenchb]{babel}
% \usepackage{fancyhdr}
% \selectlanguage{francais}
% \usepackage{float}
% \usepackage{wrapfig}
% 
% \begin{document}}

\section{Derby embarqué}
\subsection{Introducion}
\includegraphics{derby-logo-web.png}

Derby est un SGBD open source fait en JAVA sous licence Apache version 2.0. Il se base sur les standards JDBC et SQL. Il possède un driver qui permet d'avoir une base de donnée embarquée avec SGBD inclus. Mais il peut aussi être utilisé en mode client/serveur.

\subsection{Critique}

\subsubsection{Qualités}

\begin{enumerate}
 \item Etant fait en java il est portable.
 \item Utilisable dans nimporte quelle application utilisant SQL en ne modifiant que les drivers.
 \item Le driver est assez léger. En effet le JAR de la version embarquée 5.0.8 ne pèse que 2.3Mo.
 \item Sous licence libre.
 \item Une version installable de Derby est disponible, permettant de meilleurs performances sans modifier l'application d'origine.
\end{enumerate}

\subsubsection{Defauts}
\begin{enumerate}
 \item Le fait qu'il soit fait en Java le rend peu performant, et donc peu adapté à de grandes bases de données.
\end{enumerate}

\subsection{Installation du mode embarqué}
Derby embarqué pour java est très simple à installer il constitue simplement en fichier JAR qui contient le SGBD et le driver JDBC. Il es téléchargeable à cette adresse: \newline http://db.apache.org/derby/derby\_downloads.html. Il faut ensuite le prendre en compte dans la compilation du programme qui l'exploite et dans son environnement de développenment en le rajoutant dans les PATH de compilation.

\subsubsection{Inclusion de derby sous eclipse}

Pour effectuer cette opération il faut disposer d'un projet java déjà existant.

\begin{enumerate}
 \item Une fois le projet dans lequel on doit inclure derby est ouvert aller dans Project-$>$Properties.
 \item Dans Java Build Path-$>$Libraries cliquer sur Add External JARs.
 \begin{figure}[H]
\centering
\includegraphics[scale = 0.4]{Project_Properties.png}
\caption{Insertion du JAR Derby}
\end{figure}
\item Allez ensuite sélectionner le JAR désiré.
 \begin{figure}[H]
\centering
\includegraphics[scale = 0.5]{JAR_Selection.png}
\caption{Selection du JAR Derby}
\end{figure}
\item Valider le tout et c'est terminé.
\end{enumerate}


\subsection{Utilisation en mode embarqué}
Derby s'utilise comme on utiliserait un driver JDCB standard. On définit tout d'abord le driver à utiliser.
\begin{figure}[H]
\centering
\begin{minipage}{15cm}
\lstset{language=JAVA, numbers=left, frame=single, showstringspaces=false, basicstyle=\footnotesize}
\begin{lstlisting}
Class.forName(org.apache.derby.jdbc.EmbeddedDriver);
\end{lstlisting}
\end{minipage}
\caption{Définition du driver}
\end{figure}
Ensuite on se connecte à la base de données voulue. En ajoutant le "create=true", ainsi Derby crée la base de données s'il elle n'est pas déjà créé. Il est possible de donner un chemin complet.
\begin{figure}[H]
\centering
\begin{minipage}{15cm}
\lstset{language=JAVA, numbers=left, frame=single, showstringspaces=false, basicstyle=\footnotesize}
\begin{lstlisting}
String conecURL = "jdbc:derby:TEST;create=true";
Connection connection = DriverManager.getConnection(conecURL);
\end{lstlisting}
\end{minipage}
\caption{Connection à la base de donnée}
\end{figure}

La base de données est maintenant créée, dorénavant, vous pouvez l'utiliser comme un objet de connection JDBC standard. Cependant il y a quelques subtilités lors de la création de table.\newline
Les types supportés par Derby ne correspondent pas toujours à ceux que l'on peut trouver dans n'importe quel SGBD. Vous pouvez trouver les types supportés par Derby dans le lien suivant:\newline http://db.apache.org/derby/docs/10.1/ref/crefsqlj31068.html %le mettre en lien hypertext si possible 
\newline

Pour Réaliser une auto-incrémention des clés, la syntaxe est assez différente. La syntaxe est la suivante:
\begin{figure}[H]
\centering
\begin{minipage}{15cm}
\lstset{language=JAVA, numbers=left, frame=single, showstringspaces=false, basicstyle=\footnotesize}
\begin{lstlisting}
<type> NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)
\end{lstlisting}
\end{minipage}
\caption{Auto incrémentation des clés}
\end{figure}

Voici un exemple de création d'une table avec une auto-incrémentation et des champs de différents types avec Derby. 
\begin{figure}[H]
\centering
\begin{minipage}{15cm}
\lstset{language=JAVA, numbers=left, frame=single, showstringspaces=false, basicstyle=\footnotesize}
\begin{lstlisting}
String creationTable = 
	"CREATE TABLE nomTable ( id INTEGER NOT NULL GENERATED
				ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1),
						nom VARCHAR(255) NOT NULL,
						numero INTEGER default NULL,
						commentaire LONG VARCHAR,
						date TIME default NULL,
						PRIMARY KEY  (id))";
stt.execute(creationTable);
\end{lstlisting}
\end{minipage}
\caption{Création d'une table avec auto-incrémentation}
\end{figure}
 
Autrement, il suffit de l'utiliser comme un objet de connection JDBC standard.
\begin{figure}[H]
\centering
\begin{minipage}{15cm}
\lstset{language=JAVA, numbers=left, frame=single, showstringspaces=false, basicstyle=\footnotesize}
\begin{lstlisting}
Statement stt = connection.createStatement();


stt.execute("CREATE TABLE testDeTable( nom VARCHAR(12) )\r\n");

stt.execute("insert into testDeTable values('ari')");
stt.execute("insert into testDeTable values('pet')");

stt.execute("SELECT * from testDeTable");

ResultSet rs = stt.getResultSet();

while(rs.next()){
	System.out.println("Valeur : " + rs.getString("nom"));
}
\end{lstlisting}
\end{minipage}
\caption{Exemple d'utilisation simple}
\end{figure}

% \end{document}